A conventional Universal Serial Bus (“USB”) architecture is based on Master/Slave communications, where the Master in the system is called a USB host controller (“host controller”). Conventional host controllers are tightly integrated in a “host” platform, e.g., integrated into a processor, processor chipset, as a bus master controller on a Peripheral Control Interface (“PCI”) or other “inside the box” bus or the like. A host controller includes applications, device drivers (which manage attached USB devices), a USB bus driver (which provides a standard USB bus services abstraction to USB device drivers), a host controller driver, and a physical USB host controller (of which there are several types), all of which provide access to USB ports for connecting USB devices and/or USB hubs. USB hubs are devices for allowing one or more USB devices to connect back through the hub to a USB port. Under Universal Serial Bus Specification v2.0, up to 127 devices may be connected to a single host controller.
Conventional host controllers provide a register and memory-based interface that the host controller driver utilizes to accomplish data transfers between the system and connected USB devices. A conventional USB system software implementation provides a buffer-oriented streaming service for USB device drivers. A USB device driver submits buffer input/output (“I/O”) requests to the USB bus driver, which in turn sends the buffer to the appropriate USB host controller driver. The USB host controller driver then gives the buffer to the host controller hardware utilizing it's specific interface. In effect, the entire stack is buffer oriented.
An artifact of conventional USB hosts is that they have tightly integrated host controllers. Accordingly, USB devices must be within a prescribed distance of the USB host. The distance is governed by the length of the cables and the length of the cables are a function of the protocol parameters, which limit the maximum flight time. Therefore conventional USB controllers are limited in the distance they may connect to USB devices.
Another artifact of conventional USB hosts is that virtualization approaches for virtual USB ports with these hosts typically involve trapping accesses at the hardware interface level. A virtual machine monitor layer must then attempt to infer context from the hardware accesses. Because trapping the accesses can result in thousands of traps per logical operation, this approach can add significant and unnecessary overhead to providing virtual USB ports.